package com.example.basic.web.service.zoneDepot;


import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.example.basic.web.model.zoneDepot.ZoneDepot;
import com.example.basic.web.request.DepotQueryRequest;
import com.example.basic.web.request.ZoneDepotRequest;
import com.example.basic.web.response.report.StockCountResponse;
import com.example.basic.web.response.report.StockSumReportResponse;

import java.util.List;
import java.util.Map;

/**
 * <p>
 *  服务类
 * </p>
 *
 * @author suntt
 * @since 2019-10-29
 */
public interface ZoneDepotService {

    /**
     * 保存库位信息  zzl
     * @param zoneDepotRequest 模型
     * @return
     */
    Boolean saveDepot(ZoneDepotRequest zoneDepotRequest);

    /**
     * 更新库位信息
     * @param zoneDepot
     * @return
     */
    ZoneDepot modify(ZoneDepot zoneDepot);

    /**
     * 详情  zzl
     * @param depotCode 库位编码
     * @return
     */
    ZoneDepot detail(String depotCode);

    /**
     * 删除  zzl
     * @param depotCode 库位编码
     * @return
     */
    int delete(String depotCode);

    /**
     * 启用/禁用  zzl
     * @param depotCode 库位编码
     * @return
     */
    int enableOrDisable(String depotCode);

    /**
     * 仓库分区列表
     *
     * @param queryPage   分页
     * @param searchParam 模糊搜索(拼音码,五笔码,名称,编码)
     * @param isAll       是否查询全部 0-否，1-是
     * @param zoneCode    分区编码
     * @param pharmCode  仓库编码
     * @return
     */
    IPage<ZoneDepot> queryList(Page<ZoneDepot> queryPage, String searchParam, String isAll, String zoneCode, String pharmCode);

    /**
     * 查询分区下在用库位
     * @param zoneCode 分区编码
     * @return
     */
    List<ZoneDepot> queryByZone(String zoneCode);

    /**
     * 库位信息查询
     * @param queryPage 分页
     * @param depotQueryRequest
     * @return
     */
    IPage<StockCountResponse> queryDepotInfo(Page<StockCountResponse> queryPage, DepotQueryRequest depotQueryRequest);

    /**
     * 库位信息统计
     * @param depotQueryRequest
     * @return
     */
    Map depotCount(DepotQueryRequest depotQueryRequest);

    /**
     * 库存汇总查询
     * @param pharmCode 仓库编码
     * @param zoneCode 分区编码
     * @return
     */
    List<StockSumReportResponse> stockSumReport(String pharmCode, String zoneCode);

    /**
     * 空闲库位列表
     * @param pharmCode 仓库编码
     * @param zoneCode 分区编码
     * @return
     */
    List<ZoneDepot> freeDepotList(String pharmCode, String zoneCode);

    /**
     * 获取库位位置
     * @param depotCode 库位编码
     * @return
     */
    String getDepotAddress(String depotCode);

    /**
     * 库位统计对比情况
     * @return
     */
    List<Map> homeDepotCount(String pharmCode);

    /**
     * 删除库区库位信息
     * @param zoneCode 库区编码
     * @return
     */
    Boolean removeByZone(String zoneCode);

    /**
     * 更新库位为占用
     * @param depotList
     * @return
     */
    Boolean useDepot(List<String> depotList,String isUse);
}